//
//  HMTabBarItem.swift
//  WeiBo
//
//  Created by apple on 16/7/6.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit

// 继承父类的属性和方法, 有一些属性或者方法不能满足子类的需求了, 重写

class HMTabBarItem: UITabBarItem {

    override var badgeValue: String? {
        
        didSet{
            
            if badgeValue == nil {
                return
            }
            
            // 找到 UITabBarController
            let tabBarController : UITabBarController? = valueForKey("_target") as? UITabBarController
            
            // 1. 遍历 tabBar 的子视图
            for childTabBarView in tabBarController!.tabBar.subviews {
                
                //            print(childTabBarView)
                // 为了确保有这个类,程序员需要确保解包不会崩溃
                if childTabBarView.isKindOfClass(NSClassFromString("UITabBarButton")!){
                    
                    
                    // 2. 再遍历UITabBarButton 的子视图
                    for childTabbarButton in childTabBarView.subviews {
                        
                        //                    print(childTabbarButton)
                        // 判断视图是否是 _UIBadgeView
                        if childTabbarButton.isKindOfClass(NSClassFromString("_UIBadgeView")!){
                            
                            
                            // 3. 再继续遍历_UIBadgeView的子视图
                            for childBadgeView in childTabbarButton.subviews {
                                
                                //                            print(childBadgeView)
                                // 再次判断
                                if childBadgeView.isKindOfClass(NSClassFromString("_UIBadgeBackground")!){
                                    
                                    //                                print("终于找到了,还好我没有放弃")
                                    
                                    // 对私有属性进行赋值,需要找到他的私有属性
                                    // 对私有属性赋值 用KVC
                                    
                                    // 找打这个类的属性
                                    
                                    // 有多少个属性
                                    var count: UInt32 = 0
                                    
                                    let result = class_copyIvarList(NSClassFromString("_UIBadgeBackground"), &count)
                                    
                                    
                                    // 对属性进行遍历
                                    for i in 0..<count {
                                        
                                        // 1. 先要拿到 ivar
                                        // 把Uint32类型的 i 转换成 Int类型
                                        let ivar = result[Int(i)]
                                        
                                        // 2. 获取一下 属性的cstring
                                        let cname = ivar_getName(ivar)
                                        
                                        // 3. 把 cString类型转换成String
                                        let name = String(CString: cname, encoding: NSUTF8StringEncoding)
                                        
                                        print(name)
                                        
                                    }
                                    
                                    // 可以通过 KVC 给属性赋值
                                    childBadgeView.setValue(UIImage(named: "main_badge"), forKey: "_image")
                                    
                                }
                                
                                
                            }
                            
                        }
                        
                    }
                    
                }
                
            }

            
        }
        
    }
    
}
